package com.ftg.learn.day10;

/**
 * 学习线程
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/8/7 下午3:01
 */
public class LearnThread01 {

    //两个或者多个来完成一件事情

    private static Integer a = 0;

    //原子 1.8

    private static Object obj = new Object();

    /**
     * synchronized 锁定整体对象的
     * 1 : 修饰方法
     * 2 : 修饰代码块
     */
    private static  void incrementA() {
        //对象
        synchronized(a){
            System.out.println(Thread.currentThread().getName() + "--A->" + ++a);
        }
    }

    private static  void incrementB() {
        synchronized(a) {
            System.out.println(Thread.currentThread().getName() + "-B-->" + ++a);
        }
    }

    /**
     * 主方法   主函数    主线程
     *
     * @param args
     */
    public static void main(String[] args) {
        //单线程 : 自上而下


        //使用接口直接创建 Runnable 核心方法   run () 运行  start（） 启动
        Runnable r = () -> {
            for (int i = 0; i < 1000; i++) {
                incrementA();
            }
        };


        Runnable r1 = () -> {
            for (int i = 0; i < 1000; i++) {
                incrementB();
            }
        };

        //start - cpu 时间片 -- run (sleep() wait() 阻塞) -- 终止

        //启动线程 r
        Thread t1 = new Thread(r, "邵大觉");
        t1.start();

        //启动线程 r
        Thread t2 = new Thread(r1, "郭大觉");
        t2.start();

//        join 异常
        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("最终结果 :" + a);

    }

}
